#include <iostream>

class Test
{
public:
    Test()
    {

    }
    Test(const Test& t)
    {
        std::cout <<"拷贝构造"<<std::endl; 
    }
};
void print(int &a)
{
    std::cout << "左值引用\n";
}
void print(int &&a)
{
    std::cout << "右值引用\n";
}

template<typename T>
void func(T&& t)//T&&完美引用,解决模板只能传一种引用的问题，左值和右值都能传
{
    //std::forward<T>完美转发，自动识别是左值引用还是右值引用
    print(std::forward<T>(t));
}


int main()
{
    Test t;
    int a = 10;
    func(a);
    return 0;
}